#ifndef __NRF24L01SPI_H__
#define __NRF24L01SPI_H__

#include <rtthread.h>
#include <rtdevice.h>
#include <drv_common.h>

// 原有引脚定义（保留）
#define NRF24L01_SPI_BUS_NAME       "spi0"
#define NRF24L01_SPI_DEVICE_NAME    "spi02"
#define NRF24L01_CS_PIN             GET_PIN(B, 0)
#define NRF24L01_CE_PIN             GET_PIN(B, 10)
#define NRF24L01_SCK_PIN            GET_PIN(A, 5)  // 与LCD共享SCK
#define NRF24L01_MOSI_PIN           GET_PIN(A, 7)  // 与LCD共享MOSI
#define NRF24L01_MISO_PIN           GET_PIN(A, 6)  // 独立MISO

// 新增：IRQ中断引脚（用户需根据硬件实际连接修改！）
#define NRF24L01_IRQ_PIN            GET_PIN(B, 1)

// 寄存器地址（补充FEATURE/DYNPD）
#define NRF24L01_REG_CONFIG         0x00
#define NRF24L01_REG_EN_AA          0x01
#define NRF24L01_REG_EN_RXADDR      0x02
#define NRF24L01_REG_SETUP_AW       0x03
#define NRF24L01_REG_SETUP_RETR     0x04
#define NRF24L01_REG_RF_CH          0x05
#define NRF24L01_REG_RF_SETUP       0x06
#define NRF24L01_REG_STATUS         0x07
#define NRF24L01_REG_RX_ADDR_P0     0x0A
#define NRF24L01_REG_TX_ADDR        0x10
#define NRF24L01_REG_RX_PW_P0       0x11
#define NRF24L01_REG_FEATURE        0x1D  // 动态负载/ACK负载使能
#define NRF24L01_REG_DYNPD          0x1C  // 动态负载配置

// 命令（补充ACK负载命令）
#define NRF24L01_CMD_R_REGISTER     0x00
#define NRF24L01_CMD_W_REGISTER     0x20
#define NRF24L01_CMD_R_RX_PAYLOAD   0x61
#define NRF24L01_CMD_W_TX_PAYLOAD   0xA0
#define NRF24L01_CMD_FLUSH_TX       0xE1
#define NRF24L01_CMD_FLUSH_RX       0xE2
#define NRF24L01_CMD_W_ACK_PAYLOAD  0xA8  // ACK带数据命令（管道0）
#define NRF24L01_CMD_NOP            0xFF

// 共享配置（收发必须一致！）
#define RF_CHANNEL                  0x0A        // 射频通道10
#define PAYLOAD_WIDTH               2           // 数据长度3字节
const uint8_t DEVICE_ADDR[5] = {0x11, 0x22, 0x33, 0x44, 0x55}; // 设备地址

// 控制指令（与发送端一致）
const uint8_t CMD_STOP[2]  = {0xF2, 0xF1}; // 停：PC13亮
const uint8_t CMD_FORWARD[2] = {0xF2, 0xF2}; // 前：PC13灭
const uint8_t car_z[2] = {0xf2, 0xf4};   // 小车左
const uint8_t car_y[2] = {0xf2, 0xf5};   // 小车右
const uint8_t car_t[2] = {0xf2, 0xf3};     // 小车后退

// 函数声明（新增中断回调）

rt_err_t nrf24l01_init(void);
void nrf24l01_set_tx_mode(void);
void nrf24l01_set_rx_mode(void);
rt_err_t nrf24l01_send_data(uint8_t *payload, uint8_t len);
rt_err_t nrf24l01_receive_data(uint8_t *buffer, uint8_t len);
rt_bool_t nrf24l01_data_available(void);
void nrf24l01_irq_callback(void *args);  // 中断回调函数

#endif /* __NRF24L01SPI_H__ */
